﻿using sipfe.Controllers.Base;
using sipfe.model.dataAccess;
using sipfe.service.encuesta;
using sipfe.service.mante;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace sipfe.Areas.Encuesta.Controllers
{
    public class EncuestaController : BaseSipfeController
    {
        string Titulo = "REGISTRO DE ENCUESTAS DE SATISFACCIÓN";

        public ActionResult IndexCabwww()
        {
            ViewBag.TITULO = Titulo;
            
            return View("EncuestaCab");
        }
        public ActionResult IndexCab()
        {
            ViewBag.TITULO = "REGISTRO DE ENCUESTA IPFE";
            cargaCatlogos();
            return View("RegNuevaEncuestaInp");
        }

        public ActionResult CargaFormTipoObjeto(int tipoObjeto)
        {
            string vista = "";
            if (tipoObjeto == Constante.TIPO_OBJETO_ENCUESTA.MULTIPLE)
            {
                vista = "formCheckBox";
            }
            else if (tipoObjeto == Constante.TIPO_OBJETO_ENCUESTA.UNICA)
            {
                 vista = "formRadioButon";
            }
            else if (tipoObjeto == Constante.TIPO_OBJETO_ENCUESTA.DESCRIPTIVA)
            {
                vista = "formTextBox";
            }
            else if (tipoObjeto == Constante.TIPO_OBJETO_ENCUESTA.MATRICIAL)
            {
                vista = "formMatricial";
            }
            return View(vista);
        }

        public ActionResult ListarRespuestaEncuesta(string wordSearch, string sw)
        {
            CompendioManteService cMs = new CompendioManteService();
            decimal idCatalogo = Constante.getInstance().N_IDE_TABLA_RESPUESTAS_ENCUESTAS;
            if(sw.Equals("1")){
                idCatalogo = Constante.getInstance().N_IDE_TABLA_PREGUNTAS_ENCUESTAS;
            }
            return View(cMs.ListarCompendioByNombreService(idCatalogo, wordSearch));
        }

        public ViewResult AddNuevaEncuesta(int n_IdePrograma, int n_IdeFuncion, string d_FecIni, string d_FecFin, string v_Sumilla, string v_Obs,
                                            string arrayItems, int n_IdePregunta, int n_IdeTipoRpta, int n_Obliga, int n_IdeAreaEstudio,
                                            int n_IdeNumeroRpta, int n_NumeroRpta, string n_NumCaja, string arrayItemsCol)
        {

            EncuestaService cS = new EncuestaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            DateTime fecIniVig = UtilitariosUtil.formatearFecha(d_FecIni);
            SIPMaeEncuesta maeEncuesta = new SIPMaeEncuesta();
            maeEncuesta.nIdeUsuReg      =   n_IdeUsuario;
            maeEncuesta.nIdePrograma    =   n_IdePrograma;
            maeEncuesta.nIdeFuncion     =   n_IdeFuncion;
            maeEncuesta.dFecIniVig      =   fecIniVig;
            maeEncuesta.vSumilla        =   v_Sumilla;

            SIPDetEncuesta sipDetEncuesta = new SIPDetEncuesta();
            sipDetEncuesta.nIdePregunta     = n_IdePregunta;
            sipDetEncuesta.nIdeTipoRpta     = n_IdeTipoRpta;
            sipDetEncuesta.nRptaObliga      = n_Obliga;
            sipDetEncuesta.nIdeAreaEstudio  = n_IdeAreaEstudio;
            sipDetEncuesta.nIdeNumRpta      = n_IdeNumeroRpta;
            sipDetEncuesta.nNumRpta         = n_NumeroRpta;
            sipDetEncuesta.dtFecReg         = DateTime.Now;
            sipDetEncuesta.dFecIniVig       = fecIniVig;

            SIPDetPregunta sipDetPregunta;

            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MULTIPLE || n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.UNICA || n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MATRICIAL)
            {
                string[] arrayPreguntas = arrayItems.Split(',');
                for (int i = 0; i < arrayPreguntas.Length; i++)
                {
                    sipDetPregunta = new SIPDetPregunta();
                    sipDetPregunta.nTipoFila = 1;
                    sipDetPregunta.dtFecReg = DateTime.Now;
                    sipDetPregunta.dFecIniVig = fecIniVig;
                    sipDetPregunta.nIdeCompPregunta = Int32.Parse(arrayPreguntas[i]);
                    sipDetPregunta.nIdeUsu = n_IdeUsuario;
                    sipDetEncuesta.SIPDetPregunta.Add(sipDetPregunta);
                }
            }
            
            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.DESCRIPTIVA)
            {
                if (!string.IsNullOrEmpty(n_NumCaja)) sipDetEncuesta.nNumCaja = Int32.Parse(n_NumCaja);
            }
            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MATRICIAL)
            {
                string[] arrayRptaCol = arrayItemsCol.Split(',');
                for (int i = 0; i < arrayRptaCol.Length; i++)
                {
                    sipDetPregunta = new SIPDetPregunta();
                    sipDetPregunta.nTipoFila = 2;
                    sipDetPregunta.dtFecReg = DateTime.Now;
                    sipDetPregunta.dFecIniVig = fecIniVig;
                    sipDetPregunta.nIdeCompPregunta = Int32.Parse(arrayRptaCol[i]);
                    sipDetPregunta.nIdeUsu = n_IdeUsuario;
                    sipDetEncuesta.SIPDetPregunta.Add(sipDetPregunta);
                }
            }
            SIPMaeEncuesta sipMaeEncuesta = new SIPMaeEncuesta();
            maeEncuesta.SIPDetEncuesta.Add(sipDetEncuesta);
            sipMaeEncuesta = cS.AddNuevaEncuestaService(maeEncuesta);
            ViewBag.nIdeEncuesta = maeEncuesta.nIdeEncuesta;
            return View("ListarEncuestaDetById", sipMaeEncuesta);
        }

        public ViewResult AddNexPreguntaEncuesta(string arrayItems, int n_IdePregunta, int n_IdeTipoRpta, int n_Obliga, int n_IdeAreaEstudio, 
                                                int n_IdeNumeroRpta, int n_NumeroRpta, int n_IdeEncuesta, string n_NumCaja, string arrayItemsCol)
        {

            EncuestaService cS = new EncuestaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            DateTime hoy = UtilitariosUtil.FechaHoy();
            SIPDetEncuesta sipDetEncuesta = new SIPDetEncuesta();
            sipDetEncuesta.nIdeEncuesta     = n_IdeEncuesta;
            sipDetEncuesta.nIdePregunta     = n_IdePregunta;
            sipDetEncuesta.nIdeTipoRpta     = n_IdeTipoRpta;
            sipDetEncuesta.nRptaObliga      = n_Obliga;
            sipDetEncuesta.nIdeAreaEstudio  = n_IdeAreaEstudio;
            sipDetEncuesta.nIdeNumRpta      = n_IdeNumeroRpta;
            sipDetEncuesta.nNumRpta         = n_NumeroRpta;
            sipDetEncuesta.dtFecReg         = DateTime.Now;
            sipDetEncuesta.dFecIniVig       = hoy;

            SIPDetPregunta sipDetPregunta;

            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MULTIPLE || n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.UNICA || n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MATRICIAL)
            {
                string[] arrayRptaFila = arrayItems.Split(',');

                for (int i = 0; i < arrayRptaFila.Length; i++)
                {
                    sipDetPregunta = new SIPDetPregunta();
                    sipDetPregunta.nTipoFila = 1;
                    sipDetPregunta.dtFecReg = DateTime.Now;
                    sipDetPregunta.dFecIniVig = hoy;
                    sipDetPregunta.nIdeCompPregunta = Int32.Parse(arrayRptaFila[i]);
                    sipDetPregunta.nIdeUsu = n_IdeUsuario;
                    sipDetEncuesta.SIPDetPregunta.Add(sipDetPregunta);
                } 
            }
            
            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.DESCRIPTIVA)
            {
                if (!string.IsNullOrEmpty(n_NumCaja)) sipDetEncuesta.nNumCaja = Int32.Parse(n_NumCaja);
            }
            
            if (n_IdeTipoRpta == Constante.TIPO_OBJETO_ENCUESTA.MATRICIAL)
            {
                string[] arrayCol = arrayItemsCol.Split(',');

                for (int i = 0; i < arrayCol.Length; i++)
                {
                    sipDetPregunta = new SIPDetPregunta();
                    sipDetPregunta.nTipoFila = 2;
                    sipDetPregunta.dtFecReg = DateTime.Now;
                    sipDetPregunta.dFecIniVig = hoy;
                    sipDetPregunta.nIdeCompPregunta = Int32.Parse(arrayCol[i]);
                    sipDetPregunta.nIdeUsu = n_IdeUsuario;
                    sipDetEncuesta.SIPDetPregunta.Add(sipDetPregunta);
                }
            }

            SIPMaeEncuesta sipMaeEncuesta = new SIPMaeEncuesta();
            sipMaeEncuesta = cS.AddNexPreguntaEncuestaService(sipDetEncuesta);
            ViewBag.nIdeEncuesta = n_IdeEncuesta;
            //return View("AddNuevaEncuestaNext", lista);
            return View("ListarEncuestaDetById", sipMaeEncuesta);
        }
        public ActionResult ListarEncuestaDet()
        {
            EncuestaService encuesta = new EncuestaService();
            List<SIPMaeEncuesta> lista = new List<SIPMaeEncuesta>();
            lista = encuesta.ListarEncuestaDetService();
            return View(lista);
        }
        public ActionResult ListarEncuestaDetById(int n_ideEncuesta)
        {
            EncuestaService encuesta = new EncuestaService();
            SIPMaeEncuesta lista = new SIPMaeEncuesta();
            lista = encuesta.ListarEncuestaDetByIdService(n_ideEncuesta);
            return View(lista);
        }
        public ActionResult LlenaEncuestaCab()
        {
            ViewBag.TITULO = "LLENAR ENCUESTA DEL IPFE";
            ViewBag.ProgramaIpfe = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PROGRAMAS_IPFE);
            ViewBag.AmbitoEncuesta = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_AMBITO_ENCUESTAS);
            return View();
        }
        public ActionResult ListarLlenarEncuestaDet(int ide_Empresa, string n_IdePrograma, string n_IdeAmbito )
        {
            EncuestaService encuesta = new EncuestaService();
            IList<dynamic> lista = encuesta.ListarLlenarEncuestaDetService(ide_Empresa, n_IdePrograma, n_IdeAmbito);
            return View(lista);
        }
        public ActionResult ListarLLenarEncuestaDetById(int n_ideEncuesta)
        {
            EncuestaService encuesta = new EncuestaService();
            SIPMaeEncuesta lista = new SIPMaeEncuesta();
            ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
            ViewBag.TipoDocIdent = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_DOC_IDENTIFICACION);
            lista = encuesta.ListarEncuestaDetByIdService(n_ideEncuesta);
            return View(lista);
        }
        public ViewResult GrabarLLenadoEncuesta(string arrayUnica, string arrayMultiple, string arrayDescript, string arrayMatricial, int n_IdeEncuesta, string n_IdePersona)
        {
            int idPersona = 0;
            
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());

            if (string.IsNullOrEmpty(n_IdePersona))
            {
                idPersona = Int32.Parse(Session[Constante.N_IDE_PERSONA].ToString());
            }
            else
            {
                idPersona = Int32.Parse(n_IdePersona);
            }
            EncuestaService encuesta = new EncuestaService();
            SIPMaeEncuesta sipMaeEncuesta = new SIPMaeEncuesta();
            sipMaeEncuesta = encuesta.GrabarLLenadoEncuestaService(arrayUnica, arrayMultiple, arrayDescript, arrayMatricial, n_IdeUsuario,
                                                                    idPersona, n_IdeEncuesta);
            return View("GrabarLLenadoEncuestaRpta", sipMaeEncuesta);
        }

        private void cargaCatlogos()
        {
            ViewBag.ProgramaIpfe        = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PROGRAMAS_IPFE);
            ViewBag.FuncionEncuesta     = formaSelectCompendioLargo(Constante.getInstance().N_IDE_TABLA_FUNCION_ENCUESTA);
            ViewBag.rptaEncuesta        = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_RESPUESTA_ENCUESTA);
            ViewBag.AreaEstudioEncuesta = formaSelectCompendioLargo(Constante.getInstance().N_IDE_TABLA_AREA_ESTUDIO_ENCUESTA);
            ViewBag.NumRptaEncuesta = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_NUMERO_RPTA_ENCUESTA);
            ViewBag.AmbitoEncuesta = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_AMBITO_ENCUESTAS);
        }

        public ActionResult ListaMisEncuestasCab()
        {
            ViewBag.TITULO = "MIS ENCUESTAS";
            ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
            ViewBag.TipoDocIdent = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_DOC_IDENTIFICACION);
            return View();
        }
        public ActionResult ListarMisEncuestasDet(int n_IdePersona)
        {
            EncuestaService encuesta = new EncuestaService();
            IList<dynamic> lista = encuesta.ListarMisEncuestasDetService(n_IdePersona);
            return View(lista);
        }

        public ActionResult ListarMisEncuestasDetById(int n_ideEncuesta)
        {
            EncuestaService encuesta = new EncuestaService();
            SIPMaeEncuesta lista = new SIPMaeEncuesta();
            lista = encuesta.ListarEncuestaDetByIdService(n_ideEncuesta);
            return View(lista);
        }

        //n_IdePersona: n_IdePersona, n_IdeEncuesta: n_IdeEncuesta
        public HtmlString ExisteEncuestaLlenaPorPersona(int n_IdePersona, int n_IdeEncuesta)
        {
            EncuestaService encuesta = new EncuestaService();
            decimal rpta = encuesta.verificaTarifaExisteService(n_IdePersona, n_IdeEncuesta);
            var resultado = "{\"rpta\":" + rpta + "}";
            return new HtmlString(resultado);
        }


    }
}
